package org.example.springboot.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.example.springboot.DTO.ChartDataDTO;
import org.example.springboot.DTO.SystemStatsDTO;
import org.example.springboot.common.Result;
import org.example.springboot.service.SystemService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 系统控制器
 * 提供系统级别的接口，如统计数据等
 */
@Tag(name = "系统管理接口")
@RestController
@RequestMapping("/system")
public class SystemController {

    private static final Logger LOGGER = LoggerFactory.getLogger(SystemController.class);
    
    @Resource
    private SystemService systemService;
    
    /**
     * 获取系统统计数据
     * @return 统计数据
     */
    @Operation(summary = "获取系统统计数据")
    @GetMapping("/stats")
    public Result<SystemStatsDTO> getSystemStats() {
        LOGGER.info("获取系统统计数据");
        SystemStatsDTO stats = systemService.getSystemStats();
        return Result.success(stats);
    }
    
    /**
     * 获取图书分类分布数据
     * @return 分类分布数据
     */
    @Operation(summary = "获取图书分类分布数据")
    @GetMapping("/chart/category-distribution")
    public Result<List<ChartDataDTO.CategoryItem>> getCategoryDistribution() {
        LOGGER.info("获取图书分类分布数据");
        List<ChartDataDTO.CategoryItem> data = systemService.getCategoryDistribution();
        return Result.success(data);
    }
    
    /**
     * 获取借阅趋势数据
     * @return 借阅趋势数据
     */
    @Operation(summary = "获取借阅趋势数据")
    @GetMapping("/chart/borrow-trend")
    public Result<ChartDataDTO.BorrowTrendData> getBorrowTrend() {
        LOGGER.info("获取借阅趋势数据");
        ChartDataDTO.BorrowTrendData data = systemService.getBorrowTrend();
        return Result.success(data);
    }
    
    /**
     * 获取高分图书数据
     * @return 高分图书数据
     */
    @Operation(summary = "获取高分图书数据")
    @GetMapping("/chart/top-rated-books")
    public Result<List<ChartDataDTO.TopRatedBookItem>> getTopRatedBooks() {
        LOGGER.info("获取高分图书数据");
        List<ChartDataDTO.TopRatedBookItem> data = systemService.getTopRatedBooks();
        return Result.success(data);
    }
    
    /**
     * 获取热门图书数据
     * @return 热门图书数据
     */
    @Operation(summary = "获取热门图书数据")
    @GetMapping("/chart/hot-books")
    public Result<List<ChartDataDTO.HotBookItem>> getHotBooks() {
        LOGGER.info("获取热门图书数据");
        List<ChartDataDTO.HotBookItem> data = systemService.getHotBooks();
        return Result.success(data);
    }
} 